home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 April: Mac OS SDK / Dev.CD Apr 96 SDK / Dev.CD Apr 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc Development Framework / ODFDev / ODF / OS / FWODUtil / Sources / FWODExce.cpp < prev    next >
Encoding:
Text File  |  1995-11-08  |  5.0 KB  |  170 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWODExce.cpp
  4. //    Release Version:    $ 1.0d11 $
  5. //
  6. //    Copyright:    © 1995 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #include "FWOS.hpp"
  11.  
  12. #ifndef FWODEXCE_H
  13. #include "FWODExce.h"
  14. #endif
  15.  
  16. #ifndef SOM_Module_OpenDoc_Errors_defined
  17. #include "ErrorDef.xh"
  18. #endif
  19.  
  20. //========================================================================================
  21. //    Runtime Informations
  22. //========================================================================================
  23.  
  24. #if FW_LIB_EXPORT_PRAGMAS
  25. #pragma lib_export on
  26. #endif
  27.  
  28. #ifdef FW_BUILD_MAC    
  29. #pragma segment fwodutil
  30. #endif
  31.  
  32. //========================================================================================
  33. // Global functions
  34. //========================================================================================
  35.  
  36. //----------------------------------------------------------------------------------------
  37. // FW_FailODError
  38. //----------------------------------------------------------------------------------------
  39.  
  40. FW_FUNC_ATTR void FW_FailODError(Environment* ev)
  41. {
  42.     if (ev->_major)
  43.         FW_THROW(FW_XOpenDocException(ev));        
  44.     
  45. #if 0
  46.     if (ev->_major)
  47.     {
  48.         const char *excpName = somExceptionId(ev);
  49.         if (strcmp(excpName,ex_ODException) == 0)
  50.         {
  51.             ODException x = *(ODException*)somExceptionValue(ev);
  52.             somExceptionFree(ev);
  53.             ev->_major = NO_EXCEPTION;        // $$$$$ Is this done by somExceptionFree?
  54.             THROW(x.error, x.message[0] ?x.message :kODNULL);
  55.         }
  56.         else
  57.         {
  58.             // $$$$$ What is the best thing to do here?
  59.             WARN("Env has non-OpenDoc err: %s",excpName);
  60.             somExceptionFree(ev);
  61.             ev->_major = NO_EXCEPTION;        // $$$$$ Is this done by somExceptionFree?
  62.             THROW(-12345,"Unknown SOM exception");
  63.         }
  64.     }
  65. #endif
  66. }
  67.  
  68. //----------------------------------------------------------------------------------------
  69. // FW_SetException
  70. //----------------------------------------------------------------------------------------
  71.  
  72. FW_FUNC_ATTR void FW_SetException(Environment *ev, const FW_XException& exception)
  73. {
  74.     FW_SetODException(ev, exception.GetPlatformError());
  75. }
  76.  
  77. //----------------------------------------------------------------------------------------
  78. // FW_SetODException
  79. //----------------------------------------------------------------------------------------
  80.  
  81. FW_FUNC_ATTR void FW_SetODException(Environment* ev, ODError error)
  82. {
  83.     if (error)
  84.     {
  85.         ODException *x = (ODException*) SOMMalloc(sizeof(ODException));
  86.         x->error = error;
  87.         x->message[0] = '\0';
  88.         somSetException(ev, USER_EXCEPTION, ex_ODException, x);
  89.     }
  90.     else
  91.     {
  92.         somExceptionFree(ev);
  93.         ev->_major = NO_EXCEPTION;
  94.     }
  95. }
  96.  
  97. //----------------------------------------------------------------------------------------
  98. // FW_GetODException
  99. //----------------------------------------------------------------------------------------
  100.  
  101. FW_FUNC_ATTR ODError FW_GetODException(Environment* ev)
  102. {
  103.     if (ev->_major)
  104.     {
  105.         const char *excpName = somExceptionId(ev);
  106.         if (strcmp(excpName, ex_ODException) == 0)
  107.         {
  108.             ODException *x = (ODException*) somExceptionValue(ev);
  109.             return x->error;
  110.         }
  111.         else
  112.         {
  113.             // Don't know what to do, its a non-OpenDoc error
  114.             FW_DEBUG_MESSAGE("Environment has non-OpenDoc error");
  115.             return kODErrUndefined;
  116.         }
  117.     }
  118.     else
  119.         return kODNoError;
  120. }
  121.  
  122. //========================================================================================
  123. // CLASS FW_XOpenDocException
  124. //========================================================================================
  125.  
  126. FW_DEFINE_EXCEPTION(FW_XOpenDocException, FW_XException)
  127.  
  128. //----------------------------------------------------------------------------------------
  129. // FW_XOpenDocException::FW_XOpenDocException
  130. //----------------------------------------------------------------------------------------
  131.  
  132. FW_XOpenDocException::FW_XOpenDocException(Environment* ev) :
  133.     FW_XException(ev->_major),
  134.     fEv(ev)
  135. {
  136.     somExceptionFree(ev);
  137.     ev->_major = NO_EXCEPTION;            // $$$$$ Is this done by somExceptionFree?
  138. }
  139.  
  140. //----------------------------------------------------------------------------------------
  141. // FW_XOpenDocException::FW_XOpenDocException
  142. //----------------------------------------------------------------------------------------
  143.  
  144. FW_XOpenDocException::FW_XOpenDocException(ODError error) :
  145.     FW_XException(error),
  146.     fEv(NULL)
  147. {
  148.     fEv = somGetGlobalEnvironment();
  149. //    FW_SetODException(fEv, error);    // Huh? This looks wrong to me! -JEL
  150. }
  151.  
  152. //----------------------------------------------------------------------------------------
  153. // FW_XOpenDocException::FW_XOpenDocException
  154. //----------------------------------------------------------------------------------------
  155.  
  156. ODError FW_XOpenDocException::GetODError() const
  157. {
  158.     return GetPlatformError();
  159. }
  160.  
  161. //----------------------------------------------------------------------------------------
  162. // FW_XOpenDocException::~FW_XOpenDocException
  163. //----------------------------------------------------------------------------------------
  164.  
  165. FW_XOpenDocException::~FW_XOpenDocException()
  166. {
  167. }
  168.  
  169.  
  170.